[Amazon FSx for NetApp ONTAP] SMB暗号化時のパフォーマンスを比較してみた

[Amazon FSx for NetApp ONTAP] SMB暗号化時のパフォーマンスを比較してみた

細かいIOを長時間実行するようなワークロードではパフォーマンス影響を感じやすいかも
Clock Icon2024.10.18

SMB暗号化時のパフォーマンスが気になる

こんにちは、のんピ(@non____97)です。

皆さんはAmazon FSx for NetApp ONTAP(以降FSxN)でSMBの暗号化が行われている場合、どのぐらいのパフォーマンス影響があるのか気になったことはありますか? 私はあります。

NFSの場合はKerberos認証による暗号化を行う場合は以下記事で紹介されているとおり、露骨にパフォーマンス影響が発生します。

https://dev.classmethod.jp/articles/set_up_encryption_during_transfer_using_kerberos_in_amazon_fsx_for_netapp_ontap/

では、SMBの暗号化の場合はどうでしょうか。

NetApp のドキュメントを確認すると、SMB暗号化を使用するとパフォーマンスが低下すると明に記載されていますね。

SMB セッションで SMB 暗号化を使用すると、 Windows クライアントとのすべての SMB 通信でパフォーマンスが低下し、クライアントとサーバ( SMB サーバを含む SVM を実行しているクラスタ上のノード)の両方に影響します。

パフォーマンスへの影響は、 CPU 使用率の増加としてクライアントとサーバの両方に表示されますが、ネットワークトラフィックの量は変わりません。

パフォーマンスへの影響の程度は、実行している ONTAP 9 のバージョンによって異なります。ONTAP 9.7 以降では、新しい暗号化のオフロードアルゴリズムによって、暗号化された SMB トラフィックのパフォーマンスが向上します。SMB 暗号化オフロードは、 SMB 暗号化が有効になっている場合にデフォルトで有効になります。

SMB 暗号化のパフォーマンスを高めるには、 AES-NI オフロード機能が必要です。お使いのプラットフォームで AES-NI オフロードがサポートされていることを確認するには、 Hardware Universe ( HWU )を参照してください。

はるかに高速なGCMアルゴリズムをサポートするSMBバージョン3.11を使用できる場合は、さらにパフォーマンスが向上します。

ネットワーク、 ONTAP 9 のバージョン、 SMB のバージョン、および SVM の実装方法に応じて SMB 暗号化のパフォーマンスへの影響には幅があるため、影響の程度はご使用のネットワーク環境でのテストによってのみ検証可能です。

SMB 暗号化のパフォーマンスへの影響

では、どのぐらいの影響があるのでしょうか。

シチュエーションを絞って簡易的に計測してみました。

いきなりまとめ

  • 検証のサマリは以下のとおり
    • randwriteのSMB暗号化時との平均スループット差は-3.94%〜0.22%
    • randwriteのSMB暗号化時との平均IOPS差は-3.94%〜0.22%
    • randwriteのSMB暗号化時との平均レイテンシー差は-0.22%〜4.08%
    • randreadのSMB暗号化時との平均スループット差は-32.21%〜-0.58%
    • randreadのSMB暗号化時との平均IOPS差は-32.22%〜-0.51%
    • randreadのSMB暗号化時との平均レイテンシー差は-0.01%〜27.42%
    • スループットとIOPSは同じ割合で変動する
    • ブロックサイズが小さい場合は暗号化時のパフォーマンス差が大きくなる傾向がある
    • SMB暗号化を実施するとFSxNファイルシステムのCPU使用率、ネットワークIOPS、ネットワークスループットが増加する傾向がある
      • いずれもブロックサイズが小さい方が与える影響が大きい
        • CPU使用率は特に顕著
      • 暗号化によって発生するオーバーヘッド分と想定
  • 細かいIOを長時間実行するようなワークロードではパフォーマンス影響を感じる可能性がある

検証環境

検証環境は以下のとおりです。

FSxNの性能は以下のとおりです。

  • デプロイタイプ : Single-AZ 1
  • HAペア数 : 1
  • SSDサイズ : 1,024 GiB
  • スループットキャパシティ : 128 MBps
  • プロビジョンドIOPS : 3,072 IOPS

SMBクライアントおよび接続時の情報は以下のとおりです。

  • OS : Windows Server 2022 (Windows_Server-2022-English-Full-Base-2024.07.10)
  • インスタンスタイプ : c7i.large
  • 接続プロトコル : SMB 3.1.1
  • 認証方式 : Kerberos認証
  • 暗号化アルゴリズム : AES-128-GCM

確認観点は以下のとおりです。

  • SMB暗号化の利用有無によって以下の値の変化
    • IOPS
    • スループット
    • レイテンシー
    • FSxNのCPU使用率
    • FSxNのクライアントスループット
    • FSxNのクライアントIOPS

パフォーマンスの計測はfioを用いて行います。

fioのGitHubリポジトリからfio-3.38-x64.msiをダウンロードして、EC2インスタンスにインストールしました。

https://github.com/axboe/fio/releases

テストは以下シナリオで行います。

  • SMB暗号化の実施有無それぞれで、randwrite と randread を計測
  • ブロックサイズは以下
    • 4 KiB
    • 16 KiB
    • 64 KiB
    • 256 KiB
    • 1 MiB
  • 書き込みおよび読み込みはどちらも同期処理
  • スレッド数は4つ固定
  • 実行時間は60秒
  • 各実行間は少なくとも5分以上間隔を空ける

SMB暗号化無効の場合

SMB暗号化が無効であることの確認

まずはSMB暗号化が無効である場合から確認します。

FSxNファイルシステムにSSHで接続して、SMB暗号化とSMB署名を無効化します。合わせてSMB 3.1が有効であることも確認しておきます。

::*> cifs security modify -is-signing-required false -is-smb-encryption-required false

::*> cifs security show -fields is-smb-encryption-required, is-signing-required
vserver is-signing-required is-smb-encryption-required
------- ------------------- --------------------------
svm     false               false

::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled, is-fake-open-enabled, is-large-mtu-enabled, copy-offload-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled copy-offload-enabled is-fake-open-enabled is-large-mtu-enabled
------- ------------ ------------ ------------ ------------- -------------------- -------------------- --------------------
svm     false        true         true         true          false                true                 true

この状態で接続してきたセッションを表示して、暗号化されていないことを確認します。

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 719450040472436864
                   Connection ID: 239866898
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.34
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 1
                      Open Files: 0
                      Open Other: 0
                  Connected Time: 2s
                       Idle Time: 2s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: ipc$

randwrite

4KiB

ランダムな書き込みrandwriteから試します。

まずは4KiBです。

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs `
  --ioengine=psync `
  --direct=1 `
  --rw=randwrite `
  --bs=4K `
  --size=1G `
  --numjobs=4 `
  --runtime=60 `
  --eta-newline=10 `
  --time_based=1 `
  --group_reporting `
  --norandommap

fio: this platform does not support process shared mutexes, forcing use of threads. Use the 'thread' option to get rid of this warning.
fio: Windows does not support direct or non-buffered io with the synchronous ioengines. Use the 'windowsaio' ioengine with 'direct=1' and 'iodepth=1' instead.

どうやらWindowsではpsyncはサポートされていないようです。表示されているようにdirect=1iodepth=1を設定した上でIOエンジンをwindowsaioに変更し、同期書き込みを行うようにします。

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=4K `
  --size=1G `
  --thread `
  --numjobs=4 `
  --runtime=60 `
  --eta-newline=10 `
  --time_based=1 `
  --group_reporting `
  --norandommap

fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
Jobs: 4 (f=4): [w(4)][18.3%][w=22.6MiB/s][w=5774 IOPS][eta 00m:49s]
Jobs: 4 (f=4): [w(4)][35.0%][w=26.2MiB/s][w=6720 IOPS][eta 00m:39s]
Jobs: 4 (f=4): [w(4)][51.7%][w=26.0MiB/s][w=6644 IOPS][eta 00m:29s]
Jobs: 4 (f=4): [w(4)][68.9%][w=26.0MiB/s][w=6656 IOPS][eta 00m:19s]
Jobs: 4 (f=4): [w(4)][85.2%][w=24.9MiB/s][w=6384 IOPS][eta 00m:09s]
Jobs: 4 (f=4): [w(4)][100.0%][w=24.6MiB/s][w=6294 IOPS][eta 00m:00s]
fio_noencrypt_randwrite_4KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=4344: Thu Oct 17 01:36:03 2024
  write: IOPS=6471, BW=25.3MiB/s (26.5MB/s)(1517MiB/60001msec); 0 zone resets
    slat (usec): min=3, max=7441, avg= 9.94, stdev=18.56
    clat (nsec): min=257, max=12169k, avg=607455.32, stdev=224251.82
     lat (usec): min=479, max=12184, avg=617.39, stdev=225.50
    clat percentiles (usec):
     |  1.00th=[  515],  5.00th=[  529], 10.00th=[  537], 20.00th=[  545],
     | 30.00th=[  553], 40.00th=[  570], 50.00th=[  578], 60.00th=[  586],
     | 70.00th=[  603], 80.00th=[  619], 90.00th=[  660], 95.00th=[  725],
     | 99.00th=[ 1188], 99.50th=[ 1696], 99.90th=[ 3621], 99.95th=[ 6128],
     | 99.99th=[ 7504]
   bw (  KiB/s): min=11816, max=27434, per=99.68%, avg=25803.25, stdev=498.71, samples=480
   iops        : min= 2954, max= 6857, avg=6449.70, stdev=124.69, samples=480
  lat (nsec)   : 500=0.01%
  lat (usec)   : 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%, 250=0.01%
  lat (usec)   : 500=0.10%, 750=95.81%, 1000=2.61%
  lat (msec)   : 2=1.08%, 4=0.30%, 10=0.08%, 20=0.01%
  cpu          : usr=0.00%, sys=0.00%, ctx=0, majf=0, minf=0
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,388280,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=25.3MiB/s (26.5MB/s), 25.3MiB/s-25.3MiB/s (26.5MB/s-26.5MB/s), io=1517MiB (1590MB), run=60001-60001msec

正常に実行が完了しました。

以降は実行結果のみを記載します。

16KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=16K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=85.8MiB/s][w=5490 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][100.0%][w=83.9MiB/s][w=5371 IOPS][eta 00m:00s]
fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6076: Thu Oct 17 01:41:18 2024
  write: IOPS=5335, BW=83.4MiB/s (87.4MB/s)(5002MiB/60001msec); 0 zone resets
    slat (usec): min=4, max=2439, avg=17.21, stdev=16.34
    clat (nsec): min=293, max=34816k, avg=731649.18, stdev=378838.72
     lat (usec): min=531, max=34827, avg=748.86, stdev=379.56
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=43173, max=95984, per=99.71%, avg=85120.72, stdev=2701.29, samples=480
   iops        : min= 2696, max= 5999, avg=5318.39, stdev=168.90, samples=480
  lat (nsec)   : 500=0.01%
  lat (usec)   : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%
  lat (usec)   : 250=0.01%, 500=0.01%, 750=80.91%, 1000=13.81%
  lat (msec)   : 2=4.03%, 4=1.03%, 10=0.18%, 20=0.01%, 50=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=83.4MiB/s (87.4MB/s), 83.4MiB/s-83.4MiB/s (87.4MB/s-87.4MB/s), io=5002MiB (5245MB), run=60001-60001msec

64KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=64K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=130MiB/s][w=2086 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][100.0%][w=137MiB/s][w=2186 IOPS][eta 00m:00s]
fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6716: Thu Oct 17 01:47:05 2024
  write: IOPS=2133, BW=133MiB/s (140MB/s)(8002MiB/60002msec); 0 zone resets
    slat (usec): min=5, max=3039, avg=41.95, stdev=40.08
    clat (nsec): min=236, max=34876k, avg=1831586.87, stdev=834325.86
     lat (usec): min=687, max=34887, avg=1873.54, stdev=828.50
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=72395, max=228864, per=99.72%, avg=136172.73, stdev=4813.75, samples=480
   iops        : min= 1130, max= 3576, avg=2126.08, stdev=75.28, samples=480
  lat (nsec)   : 250=0.01%, 500=0.01%
  lat (usec)   : 4=0.01%, 10=0.02%, 20=0.01%, 50=0.01%, 500=0.01%
  lat (usec)   : 750=0.25%, 1000=7.36%
  lat (msec)   : 2=62.11%, 4=28.66%, 10=1.50%, 20=0.06%, 50=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=133MiB/s (140MB/s), 133MiB/s-133MiB/s (140MB/s-140MB/s), io=8002MiB (8390MB), run=60002-60002msec

256KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_256KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=256K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randwrite_256KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 256KiB-256KiB, (W) 256KiB-256KiB, (T) 256KiB-256KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randwrite_256KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=141MiB/s][w=564 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][100.0%][w=139MiB/s][w=557 IOPS][eta 00m:00s]
fio_noencrypt_randwrite_256KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=5116: Thu Oct 17 01:53:36 2024
  write: IOPS=573, BW=143MiB/s (150MB/s)(8604MiB/60003msec); 0 zone resets
    slat (usec): min=11, max=9760, avg=137.95, stdev=200.01
    clat (nsec): min=245, max=39983k, avg=6833976.24, stdev=2131928.32
     lat (usec): min=1374, max=40005, avg=6971.92, stdev=2096.35
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=78532, max=412160, per=99.72%, avg=146432.61, stdev=7654.79, samples=480
   iops        : min=  304, max= 1610, avg=570.82, stdev=29.93, samples=480
  lat (nsec)   : 250=0.01%, 500=0.01%
  lat (usec)   : 2=0.01%, 4=0.03%, 10=0.05%, 20=0.02%, 50=0.01%
  lat (usec)   : 100=0.01%, 500=0.01%
  lat (msec)   : 2=1.73%, 4=5.54%, 10=88.43%, 20=4.03%, 50=0.15%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=143MiB/s (150MB/s), 143MiB/s-143MiB/s (150MB/s-150MB/s), io=8604MiB (9022MB), run=60003-60003msec

1MiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_1MiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=1M `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randwrite_1MiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randwrite_1MiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=142MiB/s][w=142 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][100.0%][w=140MiB/s][w=139 IOPS][eta 00m:00s]
fio_noencrypt_randwrite_1MiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6984: Thu Oct 17 02:00:32 2024
  write: IOPS=144, BW=144MiB/s (151MB/s)(8660MiB/60023msec); 0 zone resets
    slat (usec): min=29, max=189518, avg=349.04, stdev=3811.88
    clat (nsec): min=432, max=84810k, avg=27364272.29, stdev=7961318.27
     lat (msec): min=4, max=189, avg=27.71, stdev= 8.35
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=85672, max=393597, per=99.77%, avg=147394.77, stdev=6263.72, samples=480
   iops        : min=   80, max=  384, avg=142.07, stdev= 6.16, samples=480
  lat (nsec)   : 500=0.01%, 1000=0.01%
  lat (usec)   : 4=0.01%, 10=0.05%, 20=0.27%, 50=0.02%, 100=0.02%
  lat (msec)   : 10=2.29%, 20=13.37%, 50=83.56%, 100=0.39%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=144MiB/s (151MB/s), 144MiB/s-144MiB/s (151MB/s-151MB/s), io=8660MiB (9081MB), run=60023-60023msec

randread

4KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randread_4KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=4K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randread_4KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randread_4KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [r(4)][19.7%][r=27.1MiB/s][r=6926 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=21.7MiB/s][r=5549 IOPS][eta 00m:00s]
fio_noencrypt_randread_4KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=1176: Thu Oct 17 02:19:50 2024
  read: IOPS=6504, BW=25.4MiB/s (26.6MB/s)(1524MiB/60002msec)
    slat (usec): min=3, max=2116, avg= 9.49, stdev= 7.73
    clat (usec): min=34, max=83915, avg=604.39, stdev=932.44
     lat (usec): min=185, max=83921, avg=613.88, stdev=932.48
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=20109, max=36160, per=100.00%, avg=26045.74, stdev=797.31, samples=476
   iops        : min= 5026, max= 9039, avg=6510.35, stdev=199.37, samples=476
  lat (usec)   : 50=0.01%, 100=0.01%, 250=50.70%, 500=10.69%, 750=22.96%
  lat (usec)   : 1000=6.86%
  lat (msec)   : 2=3.08%, 4=3.77%, 10=1.93%, 20=0.01%, 50=0.01%
  lat (msec)   : 100=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=25.4MiB/s (26.6MB/s), 25.4MiB/s-25.4MiB/s (26.6MB/s-26.6MB/s), io=1524MiB (1599MB), run=60002-60002msec

正常に実行完了しましたが、ファイルの作成が完了するのに7分ほどかかっていました。以降の実施方法は少し変更します。

16KiB

ジョブの名前をrandwrite時と同様のものにして実行します。

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=16K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
Jobs: 4 (f=4): [r(4)][20.0%][r=61.9MiB/s][r=3962 IOPS][eta 00m:48s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=58.8MiB/s][r=3760 IOPS][eta 00m:00s]
fio_noencrypt_randwrite_16KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=3732: Thu Oct 17 02:30:35 2024
  read: IOPS=3661, BW=57.2MiB/s (60.0MB/s)(3433MiB/60002msec)
    slat (usec): min=3, max=240, avg= 7.79, stdev= 5.14
    clat (usec): min=161, max=87705, avg=1083.61, stdev=1654.70
     lat (usec): min=211, max=87710, avg=1091.40, stdev=1654.70
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=33600, max=100608, per=99.97%, avg=58571.70, stdev=4907.79, samples=480
   iops        : min= 2100, max= 6288, avg=3660.49, stdev=306.75, samples=480
  lat (usec)   : 250=13.85%, 500=26.88%, 750=15.57%, 1000=23.72%
  lat (msec)   : 2=8.38%, 4=4.93%, 10=6.44%, 20=0.22%, 50=0.02%
  lat (msec)   : 100=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=57.2MiB/s (60.0MB/s), 57.2MiB/s-57.2MiB/s (60.0MB/s-60.0MB/s), io=3433MiB (3600MB), run=60002-60002msec

正常に実行が完了しました。ただし、ファイルは作成してしまっています。

64KiB

allow_file_create=0でファイルを作成しないようにしてみます。

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=64K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
fio: file creation disallowed by allow_file_create=0
Jobs: 3 (f=3): [r(2),_(1),r(1)][18.3%][r=191MiB/s][r=3056 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 3 (f=0): [f(2),_(1),f(1)][100.0%][r=442MiB/s][r=7079 IOPS][eta 00m:00s]
fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=3348: Thu Oct 17 02:37:23 2024
  read: IOPS=5506, BW=344MiB/s (361MB/s)(20.2GiB/60001msec)
    slat (usec): min=4, max=785, avg= 8.67, stdev= 5.84
    clat (usec): min=40, max=24960, avg=535.33, stdev=397.52
     lat (usec): min=260, max=24967, avg=544.00, stdev=397.37
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=130937, max=501776, per=100.00%, avg=352396.92, stdev=39616.35, samples=357
   iops        : min= 2044, max= 7839, avg=5505.07, stdev=618.91, samples=357
  lat (usec)   : 50=0.01%, 250=0.01%, 500=79.89%, 750=3.52%, 1000=1.50%
  lat (msec)   : 2=14.25%, 4=0.79%, 10=0.04%, 20=0.01%, 50=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=344MiB/s (361MB/s), 344MiB/s-344MiB/s (361MB/s-361MB/s), io=20.2GiB (21.7GB), run=60001-60001msec

実行できたのですが、ジョブ実行数が3になっていますね。

ジョブ名ではなく、既存のファイル名を指定するように変更します。

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randread_64KiB_block_1GiB_4jobs `
  --filename fio_noencrypt_randwrite_64KiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=64K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randread_64KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=524MiB/s][r=8381 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=467MiB/s][r=7477 IOPS][eta 00m:00s]
fio_noencrypt_randread_64KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6624: Thu Oct 17 03:47:26 2024
  read: IOPS=8457, BW=529MiB/s (554MB/s)(31.0GiB/60001msec)
    slat (usec): min=4, max=928, avg= 9.89, stdev= 7.80
    clat (usec): min=79, max=10792, avg=462.36, stdev=96.53
     lat (usec): min=261, max=10830, avg=472.25, stdev=96.81
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=511620, max=559176, per=100.00%, avg=541920.97, stdev=2490.92, samples=476
   iops        : min= 7993, max= 8734, avg=8466.02, stdev=38.96, samples=476
  lat (usec)   : 100=0.01%, 250=0.01%, 500=61.54%, 750=38.16%, 1000=0.19%
  lat (msec)   : 2=0.07%, 4=0.03%, 20=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=529MiB/s (554MB/s), 529MiB/s-529MiB/s (554MB/s-554MB/s), io=31.0GiB (33.3GB), run=60001-60001msec

4つのジョブで動作するようになりました。以降のrandreadはこの方法で計測します。

256KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randread_256KiB_block_1GiB_4jobs `
  --filename fio_noencrypt_randwrite_256KiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=256K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randread_256KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 256KiB-256KiB, (W) 256KiB-256KiB, (T) 256KiB-256KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=574MiB/s][r=2296 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=506MiB/s][r=2023 IOPS][eta 00m:00s]
fio_noencrypt_randread_256KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6780: Thu Oct 17 03:54:02 2024
  read: IOPS=2262, BW=566MiB/s (593MB/s)(33.1GiB/60002msec)
    slat (usec): min=7, max=1251, avg=17.29, stdev=11.01
    clat (usec): min=453, max=13762, avg=1748.94, stdev=439.96
     lat (usec): min=464, max=13771, avg=1766.23, stdev=439.95
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=387072, max=598251, per=100.00%, avg=579889.37, stdev=6124.54, samples=476
   iops        : min= 1512, max= 2336, avg=2264.25, stdev=23.90, samples=476
  lat (usec)   : 500=0.02%, 750=0.23%, 1000=0.67%
  lat (msec)   : 2=92.71%, 4=6.13%, 10=0.16%, 20=0.10%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=566MiB/s (593MB/s), 566MiB/s-566MiB/s (593MB/s-593MB/s), io=33.1GiB (35.6GB), run=60002-60002msec

1MiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_noencrypt_randread_1MiB_block_1GiB_4jobs `
  --filename fio_noencrypt_randwrite_1MiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=1M `
.
.
(以降のオプションは同一なので省略)
.
.

fio_noencrypt_randread_1MiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=575MiB/s][r=574 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=527MiB/s][r=527 IOPS][eta 00m:00s]
fio_noencrypt_randread_1MiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=5956: Thu Oct 17 04:01:02 2024
  read: IOPS=571, BW=571MiB/s (599MB/s)(33.5GiB/60006msec)
    slat (usec): min=21, max=619, avg=45.15, stdev=14.34
    clat (usec): min=1628, max=38813, avg=6951.95, stdev=752.29
     lat (usec): min=1653, max=38845, avg=6997.10, stdev=752.34
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=481280, max=608181, per=100.00%, avg=585635.83, stdev=3129.64, samples=476
   iops        : min=  470, max=  592, avg=570.27, stdev= 3.02, samples=476
  lat (msec)   : 2=0.02%, 4=0.27%, 10=99.30%, 20=0.36%, 50=0.06%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=571MiB/s (599MB/s), 571MiB/s-571MiB/s (599MB/s-599MB/s), io=33.5GiB (35.9GB), run=60006-60006msec

SMB暗号化有効の場合

SMB暗号化の有効化

::*> cifs security modify -is-smb-encryption-required true

::*> cifs security show -fields is-smb-encryption-required, is-signing-required
vserver is-signing-required is-smb-encryption-required
------- ------------------- --------------------------
svm     false               true

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 719450040472436870
                   Connection ID: 239866903
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.34
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 1
                      Open Files: 0
                      Open Other: 0
                  Connected Time: 3s
                       Idle Time: 3s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: encrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: share

randwrite

4KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randwrite_4KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=4K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randwrite_4KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_encrypt_randwrite_4KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=24.5MiB/s][w=6277 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][w=24.5MiB/s][w=6272 IOPS][eta 00m:00s]
fio_encrypt_randwrite_4KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=1012: Thu Oct 17 05:04:40 2024
  write: IOPS=6216, BW=24.3MiB/s (25.5MB/s)(1457MiB/60001msec); 0 zone resets
    slat (usec): min=4, max=4859, avg=12.74, stdev=14.69
    clat (nsec): min=259, max=10331k, avg=629842.45, stdev=220569.19
     lat (usec): min=503, max=10340, avg=642.58, stdev=221.33
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=12900, max=26318, per=99.67%, avg=24786.57, stdev=442.86, samples=480
   iops        : min= 3222, max= 6578, avg=6195.62, stdev=110.80, samples=480
  lat (nsec)   : 500=0.01%
  lat (usec)   : 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%, 500=0.01%
  lat (usec)   : 750=95.30%, 1000=3.10%
  lat (msec)   : 2=1.15%, 4=0.34%, 10=0.09%, 20=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=24.3MiB/s (25.5MB/s), 24.3MiB/s-24.3MiB/s (25.5MB/s-25.5MB/s), io=1457MiB (1528MB), run=60001-60001msec

16KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randwrite_16KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=16K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randwrite_16KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_encrypt_randwrite_16KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=86.8MiB/s][w=5553 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][w=82.6MiB/s][w=5285 IOPS][eta 00m:00s]
fio_encrypt_randwrite_16KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=7016: Thu Oct 17 05:10:36 2024
  write: IOPS=5130, BW=80.2MiB/s (84.1MB/s)(4810MiB/60001msec); 0 zone resets
    slat (usec): min=6, max=992, avg=22.68, stdev=16.55
    clat (nsec): min=702, max=21233k, avg=756119.64, stdev=405928.49
     lat (usec): min=554, max=21260, avg=778.80, stdev=406.76
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=50019, max=91744, per=100.00%, avg=82173.10, stdev=2369.07, samples=476
   iops        : min= 3124, max= 5732, avg=5134.11, stdev=148.07, samples=476
  lat (nsec)   : 750=0.01%
  lat (usec)   : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%
  lat (usec)   : 250=0.01%, 500=0.01%, 750=77.54%, 1000=17.35%
  lat (msec)   : 2=3.66%, 4=1.12%, 10=0.30%, 20=0.01%, 50=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=80.2MiB/s (84.1MB/s), 80.2MiB/s-80.2MiB/s (84.1MB/s-84.1MB/s), io=4810MiB (5043MB), run=60001-60001msec

64KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randwrite_64KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=64K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randwrite_64KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_encrypt_randwrite_64KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=135MiB/s][w=2164 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][100.0%][w=120MiB/s][w=1916 IOPS][eta 00m:00s]
fio_encrypt_randwrite_64KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6860: Thu Oct 17 05:18:24 2024
  write: IOPS=2118, BW=132MiB/s (139MB/s)(7943MiB/60001msec); 0 zone resets
    slat (usec): min=8, max=158724, avg=35.91, stdev=446.49
    clat (nsec): min=697, max=38614k, avg=1851348.62, stdev=1023873.75
     lat (usec): min=780, max=158724, avg=1887.26, stdev=1114.42
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=51123, max=228789, per=99.71%, avg=135170.47, stdev=5365.57, samples=480
   iops        : min=  798, max= 3574, avg=2110.28, stdev=83.89, samples=480
  lat (nsec)   : 750=0.01%
  lat (usec)   : 4=0.01%, 10=0.02%, 20=0.01%, 50=0.01%, 750=0.01%
  lat (usec)   : 1000=5.72%
  lat (msec)   : 2=64.03%, 4=28.19%, 10=1.83%, 20=0.14%, 50=0.04%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=132MiB/s (139MB/s), 132MiB/s-132MiB/s (139MB/s-139MB/s), io=7943MiB (8329MB), run=60001-60001msec

256KiB

fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randwrite_256KiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=256K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randwrite_256KiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 256KiB-256KiB, (W) 256KiB-256KiB, (T) 256KiB-256KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_encrypt_randwrite_256KiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=140MiB/s][w=559 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][100.0%][w=140MiB/s][w=558 IOPS][eta 00m:00s]
fio_encrypt_randwrite_256KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=5200: Thu Oct 17 05:25:44 2024
  write: IOPS=567, BW=142MiB/s (149MB/s)(8513MiB/60006msec); 0 zone resets
    slat (usec): min=17, max=9304, avg=127.84, stdev=201.44
    clat (nsec): min=359, max=64811k, avg=6918781.87, stdev=2318878.99
     lat (usec): min=1406, max=64851, avg=7046.62, stdev=2310.50
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=75323, max=371200, per=99.70%, avg=144841.38, stdev=6175.77, samples=480
   iops        : min=  292, max= 1450, avg=564.35, stdev=24.16, samples=480
  lat (nsec)   : 500=0.02%, 750=0.01%
  lat (usec)   : 2=0.01%, 4=0.01%, 10=0.05%, 20=0.02%, 50=0.01%
  lat (usec)   : 100=0.01%, 250=0.01%
  lat (msec)   : 2=0.76%, 4=9.00%, 10=86.04%, 20=3.89%, 50=0.19%
  lat (msec)   : 100=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=142MiB/s (149MB/s), 142MiB/s-142MiB/s (149MB/s-149MB/s), io=8513MiB (8926MB), run=60006-60006msec

1MiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randwrite_1MiB_block_1GiB_4jobs `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randwrite `
  --bs=1M `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randwrite_1MiB_block_1GiB_4jobs: (g=0): rw=randwrite, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
fio_encrypt_randwrite_1MiB_block_1GiB_4jobs: Laying out IO file (1 file / 1024MiB)
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][18.3%][w=141MiB/s][w=141 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=4): [w(4)][100.0%][w=143MiB/s][w=143 IOPS][eta 00m:00s]
fio_encrypt_randwrite_1MiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=2156: Thu Oct 17 05:32:06 2024
  write: IOPS=144, BW=145MiB/s (152MB/s)(8680MiB/60023msec); 0 zone resets
    slat (usec): min=40, max=278158, avg=624.81, stdev=4019.33
    clat (nsec): min=581, max=84437k, avg=27021958.45, stdev=8674755.35
     lat (msec): min=5, max=278, avg=27.65, stdev= 9.08
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=85500, max=324980, per=99.75%, avg=147719.30, stdev=5690.99, samples=480
   iops        : min=   80, max=  314, avg=142.55, stdev= 5.55, samples=480
  lat (nsec)   : 750=0.02%, 1000=0.01%
  lat (usec)   : 2=0.05%, 4=0.01%, 10=0.05%, 20=0.21%, 50=0.03%
  lat (usec)   : 100=0.02%
  lat (msec)   : 10=3.71%, 20=14.57%, 50=80.60%, 100=0.71%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
  WRITE: bw=145MiB/s (152MB/s), 145MiB/s-145MiB/s (152MB/s-152MB/s), io=8680MiB (9102MB), run=60023-60023msec

randread

4KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randread_4KiB_block_1GiB_4jobs `
  --filename fio_encrypt_randwrite_4KiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=4K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randread_4KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=39.3MiB/s][r=10.1k IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=56.5MiB/s][r=14.5k IOPS][eta 00m:00s]
fio_encrypt_randread_4KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6608: Thu Oct 17 05:40:06 2024
  read: IOPS=12.3k, BW=47.9MiB/s (50.3MB/s)(2877MiB/60001msec)
    slat (usec): min=3, max=3265, avg=10.08, stdev= 8.53
    clat (usec): min=57, max=30863, avg=315.00, stdev=219.63
     lat (usec): min=204, max=30870, avg=325.08, stdev=219.60
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=30641, max=60128, per=100.00%, avg=49121.31, stdev=2207.15, samples=476
   iops        : min= 7659, max=15030, avg=12279.18, stdev=551.75, samples=476
  lat (usec)   : 100=0.01%, 250=42.82%, 500=46.13%, 750=7.06%, 1000=3.19%
  lat (msec)   : 2=0.61%, 4=0.17%, 10=0.02%, 20=0.01%, 50=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=47.9MiB/s (50.3MB/s), 47.9MiB/s-47.9MiB/s (50.3MB/s-50.3MB/s), io=2877MiB (3017MB), run=60001-60001msec

16KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randread_16KiB_block_1GiB_4jobs `
  --filename fio_encrypt_randwrite_16KiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=16K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randread_16KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=185MiB/s][r=11.8k IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=190MiB/s][r=12.1k IOPS][eta 00m:00s]
fio_encrypt_randread_16KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=1988: Thu Oct 17 05:54:17 2024
  read: IOPS=12.5k, BW=196MiB/s (205MB/s)(11.5GiB/60001msec)
    slat (usec): min=4, max=1228, avg= 9.49, stdev= 7.42
    clat (usec): min=63, max=8756, avg=309.27, stdev=129.24
     lat (usec): min=223, max=8763, avg=318.76, stdev=129.38
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=137213, max=217232, per=100.00%, avg=200550.14, stdev=5172.68, samples=476
   iops        : min= 8575, max=13574, avg=12532.64, stdev=323.21, samples=476
  lat (usec)   : 100=0.01%, 250=5.39%, 500=91.20%, 750=1.29%, 1000=1.59%
  lat (msec)   : 2=0.47%, 4=0.07%, 10=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=196MiB/s (205MB/s), 196MiB/s-196MiB/s (205MB/s-205MB/s), io=11.5GiB (12.3GB), run=60001-60001msec

64KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randread_64KiB_block_1GiB_4jobs `
  --filename fio_encrypt_randwrite_64KiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=64K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randread_64KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=428MiB/s][r=6852 IOPS][eta 00m:49s]
Jobs: 4 (f=4): [r(4)][28.3%][r=437MiB/s][r=6987 IOPS][eta 00m:43s]
fio_encrypt_randread_64KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=1164: Thu Oct 17 06:07:17 2024
  read: IOPS=6637, BW=415MiB/s (435MB/s)(24.3GiB/60001msec)
    slat (usec): min=5, max=850, avg=16.73, stdev=14.61
    clat (usec): min=127, max=12491, avg=585.00, stdev=228.65
     lat (usec): min=322, max=12506, avg=601.73, stdev=227.52
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=193664, max=452912, per=86.47%, avg=367342.55, stdev=21493.49, samples=132
   iops        : min= 3026, max= 7076, avg=5738.42, stdev=335.78, samples=132
  lat (usec)   : 250=0.01%, 500=29.83%, 750=64.94%, 1000=1.67%
  lat (msec)   : 2=3.07%, 4=0.47%, 10=0.01%, 20=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=415MiB/s (435MB/s), 415MiB/s-415MiB/s (435MB/s-435MB/s), io=24.3GiB (26.1GB), run=60001-60001msec

256KiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randread_256KiB_block_1GiB_4jobs `
  --filename fio_encrypt_randwrite_256KiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=256K `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randread_256KiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 256KiB-256KiB, (W) 256KiB-256KiB, (T) 256KiB-256KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=567MiB/s][r=2266 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=476MiB/s][r=1904 IOPS][eta 00m:00s]
fio_encrypt_randread_256KiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=7132: Thu Oct 17 06:09:05 2024
  read: IOPS=2262, BW=566MiB/s (593MB/s)(33.1GiB/60002msec)
    slat (usec): min=9, max=1109, avg=34.95, stdev=25.75
    clat (usec): min=625, max=15604, avg=1731.11, stdev=322.33
     lat (usec): min=676, max=15620, avg=1766.07, stdev=319.99
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=371200, max=593929, per=100.00%, avg=579632.31, stdev=6966.40, samples=476
   iops        : min= 1450, max= 2318, avg=2262.71, stdev=27.17, samples=476
  lat (usec)   : 750=0.03%, 1000=0.35%
  lat (msec)   : 2=88.95%, 4=10.51%, 10=0.16%, 20=0.01%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=566MiB/s (593MB/s), 566MiB/s-566MiB/s (593MB/s-593MB/s), io=33.1GiB (35.6GB), run=60002-60002msec

1MiB

> fio `
  --directory=\\SMB-SERVER.corp.non-97.net\share\fio `
  --name fio_encrypt_randread_1MiB_block_1GiB_4jobs `
  --filename fio_encrypt_randwrite_1MiB_block_1GiB_4jobs.0.0 `
  --allow_file_create=0 `
  --ioengine=windowsaio `
  --direct=1 `
  --iodepth=1 `
  --rw=randread `
  --bs=1M `
.
.
(以降のオプションは同一なので省略)
.
.

fio_encrypt_randread_1MiB_block_1GiB_4jobs: (g=0): rw=randread, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=1
...
fio-3.38
Starting 4 threads
Jobs: 4 (f=4): [r(4)][18.3%][r=570MiB/s][r=570 IOPS][eta 00m:49s]
.
.
(中略)
.
.
Jobs: 4 (f=0): [f(4)][100.0%][r=492MiB/s][r=492 IOPS][eta 00m:00s]
fio_encrypt_randread_1MiB_block_1GiB_4jobs: (groupid=0, jobs=4): err= 0: pid=6032: Thu Oct 17 06:17:23 2024
  read: IOPS=568, BW=568MiB/s (596MB/s)(33.3GiB/60006msec)
    slat (usec): min=24, max=1030, avg=82.13, stdev=43.62
    clat (usec): min=2280, max=44916, avg=6955.50, stdev=883.03
     lat (usec): min=2374, max=44947, avg=7037.63, stdev=880.78
    clat percentiles (usec): ..(今回は省略)..
   bw (  KiB/s): min=486901, max=600609, per=100.00%, avg=582247.34, stdev=3002.20, samples=476
   iops        : min=  475, max=  586, avg=567.34, stdev= 2.91, samples=476
  lat (msec)   : 4=0.18%, 10=99.29%, 20=0.47%, 50=0.06%
  cpu          : ..(有意な差がなかったので省略)..
  IO depths    : ..(iodepth=1なので省略)..

Run status group 0 (all jobs):
   READ: bw=568MiB/s (596MB/s), 568MiB/s-568MiB/s (596MB/s-596MB/s), io=33.3GiB (35.7GB), run=60006-60006msec

考察

fioの結果

fioの実行結果をまとめると以下のとおりです。

SMB暗号化 読み書き ブロックサイズ 平均スループット(MiBps) 平均IOPS 平均レイテンシー(usec) SMB暗号化時との平均スループット差 SMB暗号化時との平均IOPS差 SMB暗号化時との平均レイテンシー差
無効 randwrite 4KiB 25.20 6449.7 617.39 - - -
無効 randwrite 16KiB 83.13 5318.39 748.86 - - -
無効 randwrite 64KiB 132.98 2126.08 1873.54 - - -
無効 randwrite 256KiB 143.00 570.82 6971.92 - - -
無効 randwrite 1MiB 143.94 142.07 277100 - - -
無効 randread 4KiB 25.44 6510.35 613.88 - - -
無効 randread 16KiB 57.20 3660.49 1091.4 - - -
無効 randread 64KiB 529.22 8466.02 472.25 - - -
無効 randread 256KiB 566.30 2264.25 1766.23 - - -
無効 randread 1MiB 571.91 570.27 6997.1 - - -
有効 randwrite 4KiB 24.21 6195.62 642.58 -3.94% -3.94% 4.08%
有効 randwrite 16KiB 80.25 5134.11 778.8 -3.46% -3.46% 4.00%
有効 randwrite 64KiB 132.00 2110.28 1887.26 -0.74% -0.74% 0.73%
有効 randwrite 256KiB 141.45 564.35 7046.62 -1.09% -1.13% 1.07%
有効 randwrite 1MiB 144.26 142.55 276500 0.22% 0.34% -0.22%
有効 randread 4KiB 47.97 12279.18 325.08 88.60% 88.61% -47.05%
有効 randread 16KiB 195.85 12532.64 129.38 242.40% 242.38% -88.15%
有効 randread 64KiB 358.73 5738.42 601.73 -32.21% -32.22% 27.42%
有効 randread 256KiB 566.05 2262.71 1766.07 -0.04% -0.07% -0.01%
有効 randread 1MiB 568.60 567.34 7037.63 -0.58% -0.51% 0.58%

※ randreadの4KiBと16KiBは他と計測方法が違うので注意

さらに要約すると以下のようなことが言えます。

  • randwriteのSMB暗号化時との平均スループット差は-3.94%〜0.22%
  • randwriteのSMB暗号化時との平均IOPS差は-3.94%〜0.22%
  • randwriteのSMB暗号化時との平均レイテンシー差は-0.22%〜4.08%
  • randreadのSMB暗号化時との平均スループット差は-32.21%〜-0.58%
  • randreadのSMB暗号化時との平均IOPS差は-32.22%〜-0.51%
  • randreadのSMB暗号化時との平均レイテンシー差は-0.01%〜27.42%
  • スループットとIOPSは同じ割合で変動する
  • ブロックサイズが小さい場合は暗号化時のパフォーマンス差が大きくなる傾向がある

randreadの64KBが外れ値的に大きな差が発生していますが、それ以外は+-5%以内の差に収まっています。

この+-5%のパフォーマンス差をどう捉えるかは動作させたいワークロード次第かと思います。

CloudWatchメトリクスの結果

FSxNのCloudWatchメトリクスも確認してみましょう。

まず、CPU使用率です。

8.注釈付き_CPU使用状況.png

SMB暗号化実施前後で明確にCPU使用率の差がありそうですね。fioのスループット、IOPSと同様でブロックサイズが小さい方がCPU使用率に与える影響が大きそうです。

続いてクライアントIOPSです。

7.注釈付き_合計クライアントIOPS.png

こちらはむしろSMB暗号化実施後の方が増加しています。暗号化によって発生しているオーバーヘッド分のIOが関係しているのかもしれません。

次にクライアントスループットです。

9.注釈付き_合計クライアントスループット.png

こちらもブロックサイズが小さい場合はSMB暗号化実施後の方が若干増えているように見えます。先述のNetAppのドキュメントにはパフォーマンスへの影響は、 CPU 使用率の増加としてクライアントとサーバの両方に表示されますが、ネットワークトラフィックの量は変わりません。と記載ありましたが、暗号化によって発生しているオーバーヘッド分が関係しているのかもしれません。

次に平均レイテンシーです。

10.注釈付き_平均レイテンシー.png

ブロックサイズが大きい場合のメトリクスが支配的すぎて分かりづらいですが、全体の傾向として大きな差はありませんでした。

その他ディスクスループットやディスクIOPSのバースト発生有無を確認しましたが、こちらは特に発生していませんでした。

6.モニタリングとパフォーマンス_パフォーマンス.png

細かいIOを長時間実行するようなワークロードではパフォーマンス影響を感じやすいかも

Amazon FSx for NetApp ONTAPでSMBの暗号化が行われている場合、どのぐらいのパフォーマンス影響があるのか確認してみました。

「SQL ServerのストレージとしてSMBサーバーを使用している」など細かいIOを長時間実行するようなワークロードでは暗号化有効時のパフォーマンス影響を感じやすいかもしれないですね。

一方、「ExcelやPDFなどをSMBサーバーに配置しクライアントPCからアクセスする」というような一般的な共有ファイルサーバーとしての利用用途だとパフォーマンスの影響はそこまで大きくないようにも思えます。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.